﻿using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using WebApiClientCore.Attributes;
using XUCore.WeChat.Apis;

namespace XUCore.WeChat.Enterprise.Apis.Member
{
    /// <summary>
    /// 客户操作（外部联系人）
    /// https://developer.work.weixin.qq.com/document/path/92114
    /// </summary>
    [HttpHost("https://qyapi.weixin.qq.com/cgi-bin/")]
    public interface IEnterpriseMemberApi : IEnterpriseWeChatApiWithAccessTokenFilter
    {
        // /// <summary>
        // /// 获取客户id列表（外部联系人）<para/>
        // ///     企业可通过此接口获取指定成员添加的客户列表。客户是指配置了客户联系功能的成员所添加的外部联系人。没有配置客户联系功能的成员，所添加的外部联系人将不会作为客户返回。<para/>
        // /// 权限说明：<para/>
        // ///     应用只能获取到可见范围内的配置了客户联系功能的成员。<para/>
        // /// <see href="https://developer.work.weixin.qq.com/document/path/92113"/>
        // /// </summary>
        // /// <param name="access_token"></param>
        // /// <param name="userid">企业成员的userid</param>
        // /// <returns></returns>
        // [HttpPost("externalcontact/list")]
        // Task<MemberUsersApiResult> GethMemberListAsync([Required] string access_token, [Required] string userid);
        /// <summary>
        /// 获取客户id列表（外部联系人）<para/>
        ///     企业可通过此接口获取指定成员添加的客户列表。客户是指配置了客户联系功能的成员所添加的外部联系人。没有配置客户联系功能的成员，所添加的外部联系人将不会作为客户返回。<para/>
        /// 权限说明：<para/>
        ///     应用只能获取到可见范围内的配置了客户联系功能的成员。<para/>
        /// <see href="https://developer.work.weixin.qq.com/document/path/92113"/>
        /// </summary>
        /// <param name="userid">企业成员的userid</param>
        /// <returns></returns>
        [HttpPost("externalcontact/list")]
        Task<MemberUsersApiResult> GethMemberListAsync([Required] string userid);
        // /// <summary>
        // /// 获取客户详情（外部联系人）<para/>
        // /// 权限说明：<para/>
        // ///     企业需要使用系统应用“客户联系”或配置到“可调用应用”列表中的自建应用的secret所获取的accesstoken来调用（accesstoken如何获取？）；<para/>
        // ///     第三方应用需具有“企业客户权限->客户基础信息”权限<para/>
        // ///     第三方/自建应用调用时，返回的跟进人follow_user仅包含应用可见范围之内的成员。<para/>
        // ///     当客户在企业内的跟进人超过500人时需要使用cursor参数进行分页获取<para/>
        // /// <see href="https://developer.work.weixin.qq.com/document/path/92114"/>
        // /// </summary>
        // /// <param name="access_token">调用接口凭证</param>
        // /// <param name="external_userid">外部联系人的userid，注意不是企业成员的账号</param>
        // /// <param name="cursor">上次请求返回的next_cursor，首次请求可不填</param>
        // /// <returns></returns>
        // [HttpGet("externalcontact/get")]
        // Task<MemberApiResult> GetMemberDetailAsync([Required] string access_token, [Required] string external_userid, string cursor = "");
        /// <summary>
        /// 获取客户详情（外部联系人）<para/>
        /// 权限说明：<para/>
        ///     企业需要使用系统应用“客户联系”或配置到“可调用应用”列表中的自建应用的secret所获取的accesstoken来调用（accesstoken如何获取？）；<para/>
        ///     第三方应用需具有“企业客户权限->客户基础信息”权限<para/>
        ///     第三方/自建应用调用时，返回的跟进人follow_user仅包含应用可见范围之内的成员。<para/>
        ///     当客户在企业内的跟进人超过500人时需要使用cursor参数进行分页获取<para/>
        /// <see href="https://developer.work.weixin.qq.com/document/path/92114"/>
        /// </summary>
        /// <param name="external_userid">外部联系人的userid，注意不是企业成员的账号</param>
        /// <param name="cursor">上次请求返回的next_cursor，首次请求可不填</param>
        /// <returns></returns>
        [HttpGet("externalcontact/get")]
        Task<MemberApiResult> GetMemberDetailAsync([Required] string external_userid, string cursor = "");
        // /// <summary>
        // /// 批量获取客户详情（外部联系人）<para/>
        // ///     企业/第三方可通过此接口获取指定成员添加的客户信息列表。<para/>
        // /// 权限说明：<para/>
        // ///     企业需要使用系统应用“客户联系”或配置到“可调用应用”列表中的自建应用的secret所获取的accesstoken来调用（accesstoken如何获取？）；<para/>
        // ///     第三方应用需具有“企业客户权限->客户基础信息”权限<para/>
        // ///     第三方/自建应用调用时，返回的跟进人follow_user仅包含应用可见范围之内的成员。<para/>
        // ///     当客户在企业内的跟进人超过500人时需要使用cursor参数进行分页获取<para/>
        // /// <see href="https://developer.work.weixin.qq.com/document/path/92994"/>
        // /// </summary>
        // /// <param name="access_token"></param>
        // /// <param name="input"></param>
        // /// <returns></returns>
        // [HttpPost("externalcontact/batch/get_by_user")]
        // Task<MemberListApiResult> GethMemberListDetailAsync([Required] string access_token, [JsonNetContent(CharSet = "utf-8")] MemberInput input);
        /// <summary>
        /// 批量获取客户详情（外部联系人）<para/>
        ///     企业/第三方可通过此接口获取指定成员添加的客户信息列表。<para/>
        /// 权限说明：<para/>
        ///     企业需要使用系统应用“客户联系”或配置到“可调用应用”列表中的自建应用的secret所获取的accesstoken来调用（accesstoken如何获取？）；<para/>
        ///     第三方应用需具有“企业客户权限->客户基础信息”权限<para/>
        ///     第三方/自建应用调用时，返回的跟进人follow_user仅包含应用可见范围之内的成员。<para/>
        ///     当客户在企业内的跟进人超过500人时需要使用cursor参数进行分页获取<para/>
        /// <see href="https://developer.work.weixin.qq.com/document/path/92994"/>
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("externalcontact/batch/get_by_user")]
        Task<MemberListApiResult> GethMemberListDetailAsync([JsonNetContent(CharSet = "utf-8")] MemberInput input);
    }
}
